package util;


import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class PinyinUtil {

    public static String get(String src, boolean fullSpell) {
        // trim 是去掉字符串两侧的空白字符
        // 例如有个字符串     hello \t  \n   => hello
        if(src == null || src.trim().length() == 0) {
            // 说明没有输入任何东西，直接返回空的字符串即可
            return null;
        }

        /**
         * 此处我们做出调整，对输出的 yu 这个拼音，能够使用 v 来表示
         */
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        // 遍历字符串的每个字符, 针对每个字符分别进行转换, 把转换得到拼音的结果, 拼接到 StringBuilder 里面
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < src.length(); i++) {
            char ch = src.charAt(i);
            // String[] result = PinyinHelper.toHanyuPinyinStringArray(ch);
            String[] result = new String[0];
            try {
                result = PinyinHelper.toHanyuPinyinStringArray(ch,format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            // if(result[0] == null || result[0].trim().length() == 0) {
            if(result == null || result.length == 0) {
                // 说明没有转换成功
                // 如果结果是空的数组, 说明转换失败了.
                // 如果输入的字符, 没有汉语拼音, 自然就会转换失败!!!
                // 比如, 输入的字符, a, b, c, 1, 2, 3
                // 保留原始字符. 直接把原始字符加入结果中
                stringBuilder.append(ch);
            } else if (fullSpell) {
                // 拼音结果非空，并且获取完整全拼
                stringBuilder.append(result[0]);
            } else {
                // 拼音结果非空, 并且获取拼音首字母
                // 比如 "汤" => ["tang1", "shang1"], 此时取 0 号元素, 得到了 "tang1" , 再取 0 号字符, 得到 t
                stringBuilder.append(result[0].charAt(0));
            }
        }
        // return stringBuilder;
        // 注意转换为字符串
        return stringBuilder.toString();
    }
}
